package Server.Entity.Dominio;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ETimeRecord {

	private int id;
	private String inizio;
	private String fine;
	private String testo;
	private EConsulente consulente;
	private boolean corrente;
	private EMoney costo;
	private EMoney costoOrario;
	private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy kk:mm:ss");

	public ETimeRecord()
	{		
		costo = new EMoney();
		costo.setValuta("euro");
		costoOrario = new EMoney();
		costoOrario.setValuta("euro");
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void startTR() {
		//this.inizio = new Date().toString();
		setDataInizio(new Date());
		this.corrente = true;
	}

	public void stopTR() {
		//this.fine = new Date().toString();
		setDataFine(new Date());
		this.corrente = false;
	}

	public void setTesto(String commento) {
		this.testo= commento; 
	}

	public boolean getCorrente() {
		return corrente;
	}

	public void setCorrente(boolean corrente) {
		this.corrente = corrente;
	}

	public EWorker getConsulente() {
		return (EWorker) consulente;
	}
	
	public void setConsulente(EConsulente consulente) {
		this.consulente = consulente;
	}

	public String getTesto() {
		return testo;
	}

	public void setInizio(String inizio) {
		this.inizio = inizio;
	}
	public void setFine(String fine) {
		this.fine = fine;
	}
	public String getInizio()
	{
		return inizio;
	}
	public String getFine()
	{
		return fine;
	}	
	
	public void setDataFine(Date fine) {
		this.fine = dateFormat.format(fine);
	}
	public void setDataInizio(Date inizio) {
		this.inizio = dateFormat.format(inizio);
	}
	public Date getDataFine() {	
		Date dataFine = new Date();
		
		try {
			dataFine = dateFormat.parse(fine);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return dataFine;
	}
	public Date getDataInizio() {	
		Date dataInizio = new Date();
		
		try {
			dataInizio = dateFormat.parse(inizio);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return dataInizio;
	}	
	/**
	 * Converte una lista di oggetti di tipo ETimeRecord in una lista di oggetti ETimeRecordI 
	 * @param iceTimeRecords lista di oggetti di tipo ETimeRecord
	 * @return
	 */
	public static ArrayList<ETimeRecord> convertIceToI( List<ETimeRecord> iceTimeRecords )
	{
		ArrayList<ETimeRecord> taskList = new ArrayList<ETimeRecord>();
		
		for (ETimeRecord iceTR: iceTimeRecords)
		{
			ETimeRecord tr = new ETimeRecord();
			
			tr.setId(iceTR.id);					
			tr.setTesto(iceTR.testo);
			tr.setCorrente(iceTR.corrente);
			
			tr.inizio = iceTR.inizio;
			tr.fine = iceTR.fine;			

			//tr.setCostoOrario(iceTR.costoOrario);
			tr.setConsulente((EConsulente) iceTR.consulente);
			
			taskList.add(tr);
		}
		
		return taskList;
	}

	public EMoney getCosto() {
		calcolaCosto();
		return costo;
	}
	public void setCosto(EMoney costo) {
		this.costo = costo;
	}
	
	public EMoney getCostoOrario() {
		return costoOrario;
	}
	public void setCostoOrario(EMoney costoOrario) {
		this.costoOrario = costoOrario;
		
	}	
	/**
	 * Calcola il costo del timerecord, che consta nel prodotto dei secondi spesi sul progetto per il suo costo orario 	
	 * @return il costo del timerecord
	 */
	public EMoney calcolaCosto()
	{		
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		Date inizioData = null;
		Date fineData = null;		
		try {
			inizioData = dateFormat.parse(inizio);
			fineData = dateFormat.parse(fine);			
	/*	} catch (ParseException e) {
			e.printStackTrace();
		}
		
		try{*/
			int minutiFine = ( int ) fineData.getTime();
		int minutiInizio = ( int ) inizioData.getTime(); 		
		
		int secondi = (minutiFine - minutiInizio) / 1000;
		

		
			int costoTimeRecord = (secondi * costoOrario.getPrezzo()) / 3600;
			costo.setPrezzo(costoTimeRecord);
		}
		catch (Exception e) {
			costo.setPrezzo(0);
		}
		return costo;
	}
}